import cv2
import time
import os
import logging

logging.basicConfig(level=logging.INFO)
log = logging.getLogger(__name__)

def capture_frame(video_source=0, interval_seconds=5, output_dir='tmp'):
    """
    每间隔指定秒数捕获一帧并保存为图片

    参数:
        video_source: 视频源，可以是摄像头设备号(通常0是默认摄像头)或视频文件路径
        interval_seconds: 捕获间隔秒数
        output_dir: 输出目录
    """
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)

    # 打开视频源
    cap = cv2.VideoCapture(video_source)
    if not cap.isOpened():
        log.error("无法打开视频源")
        return

    frame_count = 0
    last_capture_time = time.time()

    log.info(print(f"开始捕获，每{interval_seconds}秒保存一帧..."))

    try:
        while True:
            ret, frame = cap.read()
            if not ret:
                log.error("无法读取帧，可能视频已结束")
                break

            current_time = time.time()

            # 检查是否达到间隔时间
            if current_time - last_capture_time >= interval_seconds:
                # 生成文件名
                timestamp = time.strftime("%Y%m%d_%H%M%S")
                filename = os.path.join(output_dir, f"frame_{timestamp}_{frame_count}.jpg")

                # 保存帧
                cv2.imwrite(filename, frame)
                log.info(print(f"已保存: {filename}"))

                # 更新最后捕获时间
                last_capture_time = current_time
                frame_count += 1

            # 显示实时画面（可选）
            #cv2.imshow('Frame', frame)

            # 按q键退出
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

    finally:
        # 释放资源
        cap.release()
        cv2.destroyAllWindows()
        print("捕获结束")